package demo2

import (
	"fmt"
)

/*
	结构体内嵌 <----> 类的继承
	1. Go语言的结构体内嵌特性就是一种组合特性，使用组合特性可以快速构建对象的不同特性。
*/

// 可飞行的
type flying struct{}

func (f *flying) fly() {
	fmt.Println("can fly")
}

// 可行走的
type walkable struct{}

func (w *walkable) walk() {
	fmt.Println("can walk")
}

// 人类
type human struct {
	walkable
}

// 鸟类
type bird struct {
	walkable // 能行走
	flying   // 能飞行
}

// TestDemo216 结构体内嵌模拟类的继承
func TestDemo216() {
	// 实例化鸟类
	b := new(bird)
	fmt.Println("bird: ")
	b.fly()
	b.walk()

	// 实例化人类
	h := new(human)
	fmt.Println("human :")
	h.walk()
}
